/* Преобразование типов данных */

void main(void)
{
/* Объявляем и сразу инициализируем символьные переменные x и y */

unsigned char x=200;
unsigned char y=100;

/* Объявляем целую переменную z */

unsigned int z;

/* Производим вычисления */

z=x+y;

/* В этом выражении будет получен неправильный результат (z=44),
   поскольку сложение сделано с 8-разрядными числами
   и результат будет 8-разрядным, что в данном случае
   приведет к переполнению. Результат преобразуется
   в unsigned int (беззнаковое целое) только после
   сложения */

z=(unsigned int)x+y;

/* В этом выражении будет получен правильный результат (z=300),
   поскольку здесь перевод заставляет делать сложение
   16-разрядных чисел. Результат будет 16-разрядным,
   без переполнения */
}
